<?php
/*--------------------------------
功能:		中国短信网PHP HTTP接口 发送短信
修改日期:	2009-04-08
说明:		http://http.c123.com/tx/?uid=用户账号&pwd=MD5位32密码&mobile=号码&content=内容
状态:
	100 发送成功
	101 验证失败
	102 短信不足
	103 操作失败
	104 非法字符
	105 内容过多
	106 号码过多
	107 频率过快
	108 号码内容空
	109 账号冻结
	110 禁止频繁单条发送
	111 系统暂定发送
	112 号码不正确
	120 系统升级

INSERT INTO `fanwe_sms` VALUES ('8', 'C123', '中国短信网', '', 'http://http.c123.com/tx/', '17348', 'qqqq', '', '1');
--------------------------------*/
include_once("Sms.class.php");

class C123Sms implements Sms
{

	public $message = "";
	public $smsInfo;
	
	public $statusStr = array( 
		"100" => "发送成功",
		"101" => "验证失败",
		"102" => "短信不足",
		"103" => "操作失败",
		"104" => "非法字符",
		"105" => "内容过多",
		"106" => "号码过多",
		"107" => "频率过快",
		"108" => "号码内容空",
		"109" => "账号冻结",
		"110" => "禁止频繁单条发送",
		"111" => "系统暂定发送",
		"112" => "号码不正确",
		"120" => "系统升级"	 
	);
	
    public function __construct($smsInfo = '')
    { 	
		if(!empty($smsInfo))
		{
			set_time_limit(0);
			
			$this->smsInfo = $smsInfo;
		}
    }
	
	public function sendSMS($mobiles=array(),$content,$sendTime='')
	{
		$mobileLen = 50;
		$mobileList = array_chunk($mobiles,$mobileLen);
		
		$content = a_utf8ToGB($content);
		$contentLen = mb_strlen($content,"GBK");
		$smsTotalCount = ceil($contentLen / 70) * count($mobiles);		
		$successNum = 0;
		$code = '';
		foreach($mobileList as $mobileItem)
		{
			$mobile = implode(",",$mobileItem);
			//$http = 'http://http.c123.com/tx/';
			$http = $this->smsInfo['server_url'];
			$data = array
			(
				'uid'=>$this->smsInfo['user_name'],					//用户账号
				'pwd'=>strtolower(md5($this->smsInfo['password'])),	//MD5位32密码
				//'pwd'=>$this->smsInfo['password'],	//MD5位32密码
				'mobile'=>$mobile,				//号码
				'content'=>urlencode($content),			//内容
				//'encode'=>'utf8'
			);				
				
			$code= trim($this->postSMS($http,$data));			//POST方式提交
				
			$smsLog['send_content'] = a_gbToUtf8($content);;
			$smsLog['action_message'] = $this->statusStr[$code];
			$sendCount = count($mobileItem);
				
			if($code == "100")
			{
				$smsLog['success_mobiles'] = $mobile;
				$smsLog['fail_mobiles'] = "";
				$smsLog['success_count'] = $sendCount;
				$smsLog['fail_count'] = 0;
					
				$smsLog['expense_count'] = ceil($contentLen / 70) * $sendCount;

				$successNum += $sendCount;
			}
			else
			{
				$smsLog['success_mobiles'] = "";
				$smsLog['fail_mobiles'] = $mobile;
				$smsLog['success_count'] = 0;
				$smsLog['fail_count'] = $sendCount;
				$smsLog['expense_count'] = 0;
			}
				
			$smsLog['send_time'] = a_gmtTime();
				
			if(intval(a_fanweC('SMS_SEND_LOG')) == 1)
			{
				$sql = "insert into ".$GLOBALS['db_config']['DB_PREFIX']."sms_send_log (class_name,send_content,success_count,success_mobiles,fail_mobiles,expense_count,fail_count,action_message,send_time) values('C123','".$smsLog['send_content']."','".$smsLog['success_count']."','".$smsLog['success_mobiles']."','".$smsLog['fail_mobiles']."','".$smsLog['expense_count']."','".$smsLog['fail_count']."','".$smsLog['action_message']."','".$smsLog['send_time']."')";
					
				$GLOBALS['db']->query($sql);
			}
		}
		
		if(($code == "100" && count($mobiles) == 1) || ($smsTotalCount == $successNum))
		{
			$this->message ="成功发送短信【".$content."】，到手机".implode(",",$mobiles);
			return 1;
		}
		else
		{
			$this->message = $smsTotalCount."条短信中，有".($smsTotalCount - $successNum)."条未成功发送到手机".implode(",",$mobiles);
			return 0;			
		}
	}
	
	function postSMS($url,$data='')
	{
		$row = parse_url($url);
		$host = $row['host'];
		$port = $row['port'] ? $row['port']:80;
		$file = $row['path'];
		while (list($k,$v) = each($data)) 
		{
			$post .= rawurlencode($k)."=".rawurlencode($v)."&";	//转URL标准码
		}
		$post = substr( $post , 0 , -1 );
		$len = strlen($post);
		$fp = @fsockopen( $host ,$port, $errno, $errstr, 10);
		if (!$fp) {
			return "$errstr ($errno)\n";
		} else {
			$receive = '';
			$out = "POST $file HTTP/1.1\r\n";
			$out .= "Host: $host\r\n";
			$out .= "Content-type: application/x-www-form-urlencoded\r\n";
			$out .= "Connection: Close\r\n";
			$out .= "Content-Length: $len\r\n\r\n";
			$out .= $post;		
			fwrite($fp, $out);
			while (!feof($fp)) {
				$receive .= fgets($fp, 128);
			}
			fclose($fp);
			$receive = explode("\r\n\r\n",$receive);
			unset($receive[0]);
			return implode("",$receive);
		}
	}	
}
?>